package com.smart.community.region.service;

import java.util.List;
import java.util.Map;

/**
 * 缓存服务接口
 * 
 * @author Wu.Liang
 * @since 2025-01-30
 */
public interface ICacheService {

    /**
     * 缓存模板解析数据
     * 
     * @param fileId 文件ID
     * @param data 解析后的数据
     * @param expireMinutes 过期时间（分钟）
     */
    void cacheTemplateData(String fileId, Map<String, List<Map<String, Object>>> data, long expireMinutes);

    /**
     * 获取缓存的模板数据
     * 
     * @param fileId 文件ID
     * @return 解析后的数据
     */
    Map<String, List<Map<String, Object>>> getCachedTemplateData(String fileId);

    /**
     * 缓存验证结果
     * 
     * @param fileId 文件ID
     * @param validationResult 验证结果
     * @param expireMinutes 过期时间（分钟）
     */
    void cacheValidationResult(String fileId, Object validationResult, long expireMinutes);

    /**
     * 获取缓存的验证结果
     * 
     * @param fileId 文件ID
     * @return 验证结果
     */
    Object getCachedValidationResult(String fileId);

    /**
     * 缓存导入进度
     * 
     * @param taskId 任务ID
     * @param progress 导入进度
     * @param expireMinutes 过期时间（分钟）
     */
    void cacheImportProgress(String taskId, Object progress, long expireMinutes);

    /**
     * 获取缓存的导入进度
     * 
     * @param taskId 任务ID
     * @return 导入进度
     */
    Object getCachedImportProgress(String taskId);

    /**
     * 更新导入进度
     * 
     * @param taskId 任务ID
     * @param progress 进度百分比
     * @param currentStep 当前步骤
     * @param processedCount 已处理数量
     * @param totalCount 总数量
     * @param errorCount 错误数量
     */
    void updateImportProgress(String taskId, int progress, String currentStep, 
                            int processedCount, int totalCount, int errorCount);

    /**
     * 清理过期缓存
     */
    void clearExpiredCache();

    /**
     * 获取缓存统计信息
     * 
     * @return 缓存统计信息
     */
    Map<String, Object> getCacheStatistics();

    /**
     * 删除缓存
     * 
     * @param key 缓存键
     */
    void deleteCache(String key);

    /**
     * 检查缓存是否存在
     * 
     * @param key 缓存键
     * @return 是否存在
     */
    boolean exists(String key);

    /**
     * 设置缓存过期时间
     * 
     * @param key 缓存键
     * @param expireMinutes 过期时间（分钟）
     */
    void expire(String key, long expireMinutes);

    /**
     * 获取缓存剩余时间
     * 
     * @param key 缓存键
     * @return 剩余时间（秒）
     */
    long getTtl(String key);

    /**
     * 缓存模板字节数组数据
     * 
     * @param key 缓存键
     * @param data 字节数组数据
     * @param expireMinutes 过期时间（分钟）
     */
    void cacheTemplateBytes(String key, byte[] data, long expireMinutes);

    /**
     * 获取缓存的模板字节数组数据
     * 
     * @param key 缓存键
     * @return 字节数组数据
     */
    byte[] getCachedTemplateBytes(String key);
}
